- if (defined $params{year}) {
- if ($params{year} =~ m/^([+-])(\d+)$/) {
- my ($sign, $years) = ($1, $2);
- my $duration = DateTime::Duration->new(years => $years, end_of_month => 'limit');
- $params{focus}
- = $sign eq '+'
- ? $params{focus}->add_duration($duration)
- : $params{focus}->subtract_duration($duration);
- }
- else {
- $params{focus}->set(year => $params{year});
- }
+ $params{focus}->set(%focus_set);
+
+ if (defined $params{day} and $params{day} =~ m/^([+-])(\d+)$/) {
+ my ($sign, $days) = ($1, $2);
+ my $duration = DateTime::Duration->new(days => $days, end_of_month => 'limit');
+ $params{focus}
+ = $sign eq '+'
+ ? $params{focus}->add_duration($duration)
+ : $params{focus}->subtract_duration($duration);
+ }
+ if (defined $params{month} and $params{month} =~ m/^([+-])(\d+)$/) {
+ my ($sign, $months) = ($1, $2);
+ my $duration = DateTime::Duration->new(months => $months, end_of_month => 'limit');
+ $params{focus}
+ = $sign eq '+'
+ ? $params{focus}->add_duration($duration)
+ : $params{focus}->subtract_duration($duration);
+ }
+ if (defined $params{year} and $params{year} =~ m/^([+-])(\d+)$/) {
+ my ($sign, $years) = ($1, $2);
+ my $duration = DateTime::Duration->new(years => $years, end_of_month => 'limit');
+ $params{focus}
+ = $sign eq '+'
+ ? $params{focus}->add_duration($duration)
+ : $params{focus}->subtract_duration($duration);